<html>
    <head>
        <title>去UTF-8文件的BOM头</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h2>去UTF-8文件的BOM头</h2>
    </body>
</html>

<?php

if(isset($_GET['dir']))
{
$basedir=$_GET['dir'];

}else{

$basedir = '.';

}


$auto = 1;

checkdir($basedir);

//遍历文件

function checkdir($basedir){

if ($dh = opendir($basedir)) {

while (($file = readdir($dh)) !== false) {

if ($file != '.' && $file != '..'){

if (!is_dir($basedir . "/" . $file)) { //不是目录时，调用checkBOM()检查文件的BOM头

echo "filename: $basedir/$file"  . " " . checkBOM("$basedir/$file") . " <br>";

}else{

$dirname = $basedir . "/" . $file; //是目录时，递归调用继续遍历文件

checkdir($dirname);

}

}

}

closedir($dh);

}

}


//检查UTF8的BOM头

function checkBOM ($filename) {

global $auto;

$contents = file_get_contents($filename);

$charset[1] = substr($contents, 0, 1);

$charset[2] = substr($contents, 1, 1);

$charset[3] = substr($contents, 2, 1);

if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {

if ($auto == 1) {

$rest = substr($contents, 3);

rewrite ($filename, $rest);

return ("<font color=red>BOM found, automatically removed.</font>");

} else {

return ("<font color=red>BOM found.</font>");

}

}else {

return ("BOM Not Found.");

}

}


//写文件

function rewrite ($filename, $data) {

$filenum = fopen($filename, "w");

flock($filenum, LOCK_EX);

fwrite($filenum, $data);

fclose($filenum);

}

?>
